---
id: Nginx的缓存
sidebar_position: 2.7
description: 用户访问的时候nginx时会分为两个地方的缓存(浏览器端和nginx端)，缓存是针对的是一些静态资源文件（html/css/js/图片/音频/视频等）
---
## Nginx的缓存
<figure>
    <img src={require('./img/nginx缓存.jpg').default}/>
    <center><figcaption>nginx缓存</figcaption></center>
</figure>
用户访问的时候nginx时会分为两个地方的缓存(浏览器端和nginx端)，缓存是针对的是一些静态资源文件（html/css/js/图片/音频/视频等）
### 浏览器缓存
加速用户访问，提升单个用户（浏览器访问者）体验，缓存在本地
### Nginx 缓存：
* 缓存在Nginx端，以文件的形式存在，提升所有访问到Nginx这一端的用户。
* 提升访问上游（upstream）服务器的速度。
* 用户访问仍然会产生请求流量

:::tip
nginx请求上游服务器的资源时会有内网带宽的损耗，需要有一个请求和响应的时间。如果上游服务器的内容（静态文件）会被缓存到nginx端的话，内网的损耗就没有那么大了，响应时间也会减小。
:::
## Nginx控制浏览器缓存
对于浏览器端的缓存，可以使用 expires 指令做一定的控制。主要在浏览器端观察响应头中的 expires（过期时间） 、Date（当前时间）、last_modified（最后修改时间）、Cache-Control等属性
```conf
location / {
    alias /home/test;
    # expires 10s; # 设置缓存在10s后过期
    # expires @22h30m; # 设置缓存在每天 22h30m过期
    # expires -1h; # 设置缓存提前过期
    # expires epoch; # 表示 nocache，不设置缓存，响应头中的 Cache-Control 属性是 no-cache
    # expires off; # expires off expires 的默认设置，关闭状态，关闭并不代表没有 expires ，浏览器还是有默认机制，只不过是在 nginx 端响应中没有增加任何关于缓存的内容。
    expires max; # 设置缓存永不过期。
}
```
## Nginx的反向代理缓存
```conf
# proxy_cache_path 设置缓存目录
#       keys_zone 设置共享内存以及占用空间大小
#       max_size 设置缓存大小
#       inactive 超过此时间则被清理
#       use_temp_path 临时目录，使用后会影响nginx性能
proxy_cache_path /usr/local/nginx/upstream_cache keys_zone=mycache:5m max_size=1g inactive=1m use_temp_path=off;

location / {
    proxy_pass  http://tomcats;

    # 启用缓存，和keys_zone一致
    proxy_cache mycache;
    # 针对200和304状态码缓存时间为8小时
    proxy_cache_valid   200 304 8h;
}
```